import utils.Ec;
import utils.StringUtil;
import utils.SwingConsole;

import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;

/**
 *
 * 加密文件
 *
 * 2018/4/30-17:20
 * 2018
 * Created by wuqiang on 2018/4/30.
 */
public class Encryption extends JFrame{
    private static final String SOURCE_BTN = "选择源";
    private static final String TARGET_BTN = "选择目标";
    JPanel inputPanel = new JPanel();//输入的文件夹名称
    JPanel outputPanel = new JPanel();//输出的文件夹名称

    JButton sourceFileBtn = new JButton(SOURCE_BTN);
    JButton targetFileBtn = new JButton(TARGET_BTN);

    JTextField sourceFileDir = new JTextField(30);//源文件路径
    JTextField targetFileDir = new JTextField(30);//目标文件路径

    JButton encryptBtn = new JButton("加密/解密");//加密按钮
    JTextArea textArea = new JTextArea();

    public Encryption() {
        setLayout(new GridLayout(4, 1));

        inputPanel.setLayout(new FlowLayout());
        sourceFileBtn.addActionListener(new OpenFileListener());//注册监听事件
        inputPanel.add(sourceFileBtn);
        inputPanel.add(sourceFileDir);
        add(inputPanel);

        outputPanel.setLayout(new FlowLayout());
        targetFileBtn.addActionListener(new OpenFileListener());
        outputPanel.add(targetFileBtn);
        outputPanel.add(targetFileDir);
        add(outputPanel);

        encryptBtn.addActionListener(new EncryptListener());//注册按下按钮事件
        add(encryptBtn);
        add(new JScrollPane(textArea));
    }

    /**
     * 加密按钮事件
     */
    class EncryptListener implements ActionListener{
        /**
         * 1、获取源路径与目标路径，并校验是否正确
         * 2、调用加密方法，生成目标文件
         * @param e
         */
        @Override
        public void actionPerformed(ActionEvent e) {
            //获取源路径和目标路径
            try{
                String sourceFilePath = sourceFileDir.getText();
                String targetFilePath = targetFileDir.getText();
                if(StringUtil.isBlank(sourceFilePath)
                        ||StringUtil.isBlank(targetFilePath)){
                    throw new RuntimeException("源路径和目标路径不能为空！");
                }
                File sourceFile=new File(sourceFilePath);
                File targetFile=new File(targetFilePath);
                if(!sourceFile.isDirectory()){
                    throw new RuntimeException("源路径必须是目录！");
                }
                if(!targetFile.isDirectory()){
                    throw new RuntimeException("目标路径必须是目录！");
                }
                //遍历源目录文件
                File[] listFile=sourceFile.listFiles();
                textArea.setText("源文件 一共 "+listFile.length+"个文件:");
                for(int i=0;i<listFile.length;i++){
                    Long start=System.currentTimeMillis();
                    //
                    //textArea.setText(textArea.getText()+"\r\n开始处理："+(i+1)/listFile.length+"->");
                    textArea.append("\r\n开始处理："+(i+1)+"/"+listFile.length+"->");
                    File file=listFile[i];
                    //目标文件名称  = 源文件名称 +后缀名(en)
                    String sourceName=file.getName();
                    String targetName=sourceName+".en";
                    File tFile=new File(targetFile,targetName);
                    Ec.encrypt(file, tFile);//开始加密
                    Long end=System.currentTimeMillis();
                    textArea.append((i+1)+"/"+listFile.length+"，处理完毕，用时："+
                            ((end-start)/1000)+"s");
                }
            }catch (Exception ex){
                textArea.setText(ex.getMessage());
            }
        }
    }
    /**
     * 选择文件的监听事件
     */
    class OpenFileListener implements ActionListener {
        @Override
        public void actionPerformed(ActionEvent e) {
            JFileChooser c=new JFileChooser();
            int rVal=c.showOpenDialog(Encryption.this);
            switch (e.getActionCommand()) {
            case SOURCE_BTN: {//点击的是，选择源的按钮
                if(rVal==JFileChooser.APPROVE_OPTION){
                    sourceFileDir.setText(c.getCurrentDirectory().toString());
                }
                if(rVal==JFileChooser.CANCEL_OPTION){
                    sourceFileDir.setText("");
                }
                break;
            }
            case TARGET_BTN: {//点击的是，选择目标的按钮
                if(rVal==JFileChooser.APPROVE_OPTION){
                    targetFileDir.setText(c.getCurrentDirectory().toString());
                }
                if(rVal==JFileChooser.CANCEL_OPTION){
                    targetFileDir.setText("");
                }
                break;
            }
            }
        }
    }

    public static void main(String[] args) {
        //显示页面
        SwingConsole.run(new Encryption(), 500, 200);
    }
}
